package cn.aws360.boot.system.api.exception;

import cn.aws360.boot.base.api.exception.enums.AbstractExceptionEnum;
import lombok.Getter;
import lombok.RequiredArgsConstructor;

import static cn.aws360.boot.system.api.constant.SysConstant.*;

/**
 * @author junnan
 */
@Getter
@RequiredArgsConstructor
public enum SysExceptionEnum implements AbstractExceptionEnum {

    /**
     * 用户管理模块
     */
    USER_NOT_EXIST(MODULE_USER_NAME, MODULE_USER_CODE + "11", "用户不存在或已删除!"),
    USER_NOT_OWNER(MODULE_USER_NAME, MODULE_USER_CODE + "12", "用户不是当前登录人!"),
    USER_NAME_HAS_EXIST(MODULE_USER_NAME, MODULE_USER_CODE + "21", "用户 username: {}, 用户名称已存在!"),
    USER_DONT_UPDATE_FOR_ROOT(MODULE_USER_NAME, MODULE_USER_CODE + "31", "顶级用户不能修改!"),
    USER_DONT_UPDATE_FOR_PASS_NOT_SAME(MODULE_USER_NAME, MODULE_USER_CODE + "35", "两次密码不一致不可修改!"),
    USER_DONT_UPDATE_FOR_PASS_OLD_ERROR(MODULE_USER_NAME, MODULE_USER_CODE + "36", "旧密码不正确不可修改!"),
    USER_DONT_DELETE_FOR_ROOT(MODULE_USER_NAME, MODULE_USER_CODE + "41", "顶级用户不能删除!"),
    USER_EXPORT_FAIL(MODULE_USER_NAME, MODULE_USER_CODE + "51", "用户导出失败!"),

    /**
     * 角色管理模块
     */
    ROLE_NOT_EXIST(MODULE_ROLE_NAME, MODULE_ROLE_CODE + "11", "角色不存在或已删除!"),
    ROLE_CODE_HAS_EXIST(MODULE_ROLE_NAME, MODULE_ROLE_CODE + "21", "角色 code: {}, 角色编码已存在!"),
    ROLE_DONT_UPDATE_FOR_ROOT(MODULE_ROLE_NAME, MODULE_ROLE_CODE + "31", "顶级角色不能修改!"),
    ROLE_DONT_DELETE_FOR_ROOT(MODULE_ROLE_NAME, MODULE_ROLE_CODE + "41", "顶级角色不能删除!"),
    ROLE_DONT_DELETE_FOR_HAS_USER(MODULE_ROLE_NAME, MODULE_ROLE_CODE + "42", "角色 id: {}, 存在用户不能删除!"),

    /**
     * 菜单管理模块
     */
    MENU_NOT_EXIST(MODULE_MENU_NAME, MODULE_MENU_CODE + "11", "菜单不存在或已删除!"),
    MENU_DONT_UPDATE_FOR_ROOT(MODULE_MENU_NAME, MODULE_MENU_CODE + "31", "顶级菜单不能修改!"),
    MENU_DONT_DELETE_FOR_ROOT(MODULE_MENU_NAME, MODULE_MENU_CODE + "41", "顶级菜单不能删除!"),
    MENU_DONT_DELETE_FOR_HAS_ITEM(MODULE_MENU_NAME, MODULE_MENU_CODE + "42", "菜单 id: {}, 存在子项不能删除!"),
    MENU_DONT_DELETE_FOR_HAS_ROLE(MODULE_MENU_NAME, MODULE_MENU_CODE + "43", "菜单 id: {}, 存在角色不能删除!"),

    /**
     * 部门管理模块
     */
    DEPT_NOT_EXIST(MODULE_DEPT_NAME, MODULE_DEPT_CODE + "11", "部门不存在或已删除!"),
    DEPT_DONT_UPDATE_FOR_ROOT(MODULE_DEPT_NAME, MODULE_DEPT_CODE + "31", "顶级部门不能修改!"),
    DEPT_DONT_UPDATE_FOR_TO_SUB(MODULE_DEPT_NAME, MODULE_DEPT_CODE + "31", "部门不能修改为当前部门的子部门!"),
    DEPT_DONT_DELETE_FOR_ROOT(MODULE_DEPT_NAME, MODULE_DEPT_CODE + "41", "顶级部门不能删除!"),
    DEPT_DONT_DELETE_FOR_HAS_ITEM(MODULE_DEPT_NAME, MODULE_DEPT_CODE + "42", "部门 id: {}, 存在子项不能删除!"),
    DEPT_DONT_DELETE_FOR_HAS_USER(MODULE_DEPT_NAME, MODULE_DEPT_CODE + "43", "部门 id: {}, 存在用户不能删除!"),

    /**
     * 参配管理模块
     */
    CONF_NOT_EXIST(MODULE_CONF_NAME, MODULE_CONF_CODE + "11", "参配不存在或已删除!"),
    CONF_CODE_HAS_EXIST(MODULE_CONF_NAME, MODULE_CONF_CODE + "21", "参配 code: {}, 参配编码已存在!"),
    CONF_DONT_DELETE_FOR_SYS(MODULE_CONF_NAME, MODULE_CONF_CODE + "41", "参配: {}, 系统参配不能删除!"),

    /**
     * 字典管理模块
     */
    DICT_NOT_EXIST(MODULE_DICT_NAME, MODULE_DICT_CODE + "11", "字典不存在或已删除!"),
    DICT_ITEM_NOT_EXIST(MODULE_DICT_NAME, MODULE_DICT_CODE + "12", "字典子项不存在或已删除!"),
    DICT_CODE_HAS_EXIST(MODULE_DICT_NAME, MODULE_DICT_CODE + "21", "字典 code: {}, 字典编码已存在!"),
    DICT_DONT_DELETE_FOR_SYS(MODULE_DICT_NAME, MODULE_DICT_CODE + "41", "字典: {}, 系统字典不能删除!"),
    DICT_DONT_DELETE_FOR_HAS_ITEM(MODULE_DICT_NAME, MODULE_DICT_CODE + "42", "字典 id: {}, 存在子项不能删除!"),

    /**
     * 文件管理模块
     */
    FILE_NOT_EXIST(MODULE_FILE_NAME, MODULE_FILE_CODE + "11", "文件不存在或已删除!"),
    FILE_UPLOAD_FAIL(MODULE_FILE_NAME, MODULE_FILE_CODE + "51", "文件上传失败, exp: {}"),

    /**
     * 日志管理模块
     */
    LOGS_NOT_EXIST(MODULE_LOGS_NAME, MODULE_LOGS_CODE + "11", "日志不存在或已删除!"),

    ;

    private final String module;
    private final String errCode;
    private final String userTip;

}